在「如何找出欄位值是 NULL 的資料」,已經討論過要如何找出 NULL 值的資料。這次要分享的是讓 NULL 值的資料,不要顯示為 NULL,而是改以其他文字來取代。
Microsoft SQL Server 提供一個 ISNULL 函數,可以讓我們取代 NULL 值,其語法如下:
ISNULL(陳述式1, 陳述式2)
當「陳述式1」的結果是 NULL 時,就傳回「陳述式2」的值,否則就會傳回「陳述式1」的值。例如,下面的程式碼,表示找出「產品編號」小於 325 的產品,當「顏色」欄位的值是 NULL 時,會改用「未知」來顯示:
USE AdventureWorks
GO
SELECT ProductID 產品編號, ISNULL(Color, '未知') 顏色
FROM Production.Product
WHERE ProductID < 325
ORDER BY ProductID
執行結果:
既然分享了如何使用 ISNULL 函數,就順便說一說跟它很相似的另外一個函數:NULLIF,其使用的語法為:
NULLIF(陳述式1, 陳述式2)
當「陳述式1」的結果與「陳述式2」的結果相等時,就會傳回 NULL 值,否則就會傳回「陳述式1」的值。
例如下面的程式碼,表示當找出「產品編號」是 325 之前的產品,並使用 NULLIF 判斷「製造代碼」與「成品代碼」是否相同:
USE AdventureWorks
GO
SELECT ProductID 產品編號, MakeFlag 製造代碼, FinishedGoodsFlag 成品代碼,
NULLIF(MakeFlag, FinishedGoodsFlag) 製造代碼與成品代碼是否相同
FROM Production.Product
WHERE ProductID < 325
ORDER BY ProductID
執行結果:
不知道大家有沒有發現到:如果比較的結果為真,NULLIF 就會傳回 NULL,而 ISNULL 卻傳回非 NULL 的值(從語法來看,就是傳回「陳述式2」的值)。這就是這兩個函數最大的差異!
大大這個函數(ISNULL)對於欄位值是空白的會有用嗎??
因為常常在程式運作過程中
user常會不keyin一些欄位的資料
或是剛好沒有資料,就會留下空白
事後在資料做查詢時,總是會出現錯誤...
欄位值是 NULL 跟空白是不同的值
NULL 是一個虛無值
空白是空字串,就是在插入資料時,用 '' 的表示法新增資料到資料表中
SQL查詢 Export 成CSV檔時它會很雞婆的把Null值填入NULL字串
例如:
ON Call,7,NULL,NULL,加,NULL
我希望它保持入下的資料,Null值是不塞入任何資料的
ON Call,7,,,加,
請問如何達成?
那就是下 isnull(欄位名,'')
就不會出成 null,而是空字串